package proxy;

import com.service.OrderService;
import com.service.impl.OrderServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author 徒有琴
 */
public class JDKOrderProxy {
    //被代理的对象
    private final OrderService orderService = new OrderServiceImpl();
    //如何处理被代理对象的方法
    InvocationHandler handler = new InvocationHandler() {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("start...");
            //res被代理的对象方法的返回值
            //method调用的是被代理对象的哪个方法，args调用方法的参数
            Object res = method.invoke(orderService, args);//调用被代理的对象的方法
            System.out.println("end。。。");
            return res;
        }
    };
    //生成代理对象
    Object proxy = Proxy.newProxyInstance(JDKOrderProxy.class.getClassLoader(),
            orderService.getClass().getInterfaces(),
            handler
    );

    public Object getProxy() {
        return proxy;
    }
}
